Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

290
Views
¿Para qué sirve el operador "con" en C#?

Me he encontrado con este código:

 var rectangle = new Rectangle(420, 69); var newOne = rectangle with { Width = 420 }

Me preguntaba acerca with la palabra clave en el código C#. ¿Para qué sirve? ¿Y cómo se puede usar? ¿Y qué beneficios aporta a la lengua?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Es un operador que se usa en expresiones para facilitar la duplicación de un objeto, anulando algunas de sus propiedades/campos públicos (opcional) con expresión - MSDN

Actualmente solo se puede utilizar con registros. Pero tal vez no habrá tal restricción en el futuro (suposición).

Aquí hay un ejemplo de cómo se puede usar:

 // Declaring a record with a public property and a private field record WithOperatorTest { private int _myPrivateField; public int MyProperty { get; set; } public void SetMyPrivateField(int a = 5) { _myPrivateField = a; } }

Ahora veamos cómo se puede usar with operator:

 var firstInstance = new WithOperatorTest { MyProperty = 10 }; firstInstance.SetMyPrivateField(11); var copiedInstance = firstInstance with { }; // now "copiedInstance" also has "MyProperty" set to 10 and "_myPrivateField" set to 11. var thirdCopiedInstance = copiedInstance with { MyProperty = 100 }; // now "thirdCopiedInstance " also has "MyProperty" set to 100 and "_myPrivateField" set to 11. thirdCopiedInstance.SetMyPrivateField(-1); // now "thirdCopiedInstance " also has "MyProperty" set to 100 and "_myPrivateField" set to -1.

NOTA para tipos de referencia de MSDN:

En el caso de un miembro de tipo de referencia, solo se copia la referencia a una instancia de miembro cuando se copia un operando. Tanto el operando de copia como el original tienen acceso a la misma instancia de tipo de referencia.

Esa lógica se puede modificar modificando el constructor de copia de un tipo de registro. Cita de MSDN:

De forma predeterminada, el constructor de copias es implícito, es decir, generado por el compilador. Si necesita personalizar la semántica de copia de registro, declare explícitamente un constructor de copia con el comportamiento deseado.

 protected WithOperatorTest(WithOperatorTest original) { // Logic to copy reference types with new reference }

Y en términos de los beneficios que brinda, creo que ahora debería ser bastante obvio que hace que la copia de instancias sea mucho más fácil y conveniente.

over 4 years ago · Santiago Trujillo Report

0

Básicamente, el operador with creará una nueva instancia de objeto (solo registros, por ahora), al "hacer frente a los valores" del objeto "fuente" y anular algunas propiedades con nombre en el objeto de destino.

Por ejemplo, en lugar de hacer esto:

 var person = new Person("John", "Doe") { MiddleName = "Patrick" }; var modifiedPerson = new Person(person.FirstName, person.LastName) { MiddleName = "William" };

Puedes hacerlo:

 var modifiedPerson = person with { MiddleName = "Patrick" };

Básicamente, escribirás menos código.

Use esta fuente para obtener más detalles sobre el ejemplo anterior y la documentación oficial para obtener más ejemplos.

over 4 years ago · Santiago Trujillo Report

0

La respuesta corta es la siguiente: se agregó with palabra clave en C# para facilitar la copia de objetos complicados, con la posibilidad de anular algunas de las propiedades públicas. Los ejemplos ya se proporcionan brevemente en la respuesta aceptada.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!